package com.micro.ai.auth.service;

import java.util.concurrent.TimeUnit;

/**
 * Redis服务接口
 * 
 * @author micro-ai
 * @since 0.0.1
 */
public interface RedisService {

    /**
     * 设置键值对
     * 
     * @param key 键
     * @param value 值
     */
    void set(String key, Object value);

    /**
     * 设置键值对（带过期时间）
     * 
     * @param key 键
     * @param value 值
     * @param timeout 过期时间
     * @param unit 时间单位
     */
    void set(String key, Object value, long timeout, TimeUnit unit);

    /**
     * 获取值
     * 
     * @param key 键
     * @return 值
     */
    Object get(String key);

    /**
     * 获取值（指定类型）
     * 
     * @param key 键
     * @param clazz 类型
     * @return 值
     */
    <T> T get(String key, Class<T> clazz);

    /**
     * 删除键
     * 
     * @param key 键
     * @return 是否删除成功
     */
    boolean delete(String key);

    /**
     * 检查键是否存在
     * 
     * @param key 键
     * @return 是否存在
     */
    boolean hasKey(String key);

    /**
     * 设置过期时间
     * 
     * @param key 键
     * @param timeout 过期时间
     * @param unit 时间单位
     * @return 是否设置成功
     */
    boolean expire(String key, long timeout, TimeUnit unit);

    /**
     * 获取过期时间
     * 
     * @param key 键
     * @return 过期时间（秒）
     */
    long getExpire(String key);
}
